// admin 模块的业务逻辑层
const md5 = require("md5");
const {loginDao, updateAdminDao} = require("../dao/adminDao");
const jwt = require("jsonwebtoken");
const {ValidationError} = require("../utils/errors");
const { formatResponse } = require("../utils/tool");

// 登录
module.exports.loginService = async function (loginInfo) {
  loginInfo.loginPwd = md5(loginInfo.loginPwd); // 进行加密
  //进行数据验证，查询该数据在数据库里存在与否
  let data = await loginDao(loginInfo);
  if(data && data.dataValues) {
    // 添加一个token
    data = {
      id: data.dataValues.id,
      loginId: data.dataValues.loginId,
      name: data.dataValues.name
    };
    var loginPeriod = null;
    if(loginInfo.remember) {
      // 如果用户勾选了登录7天，那么remember里面是有值的，将这个值赋给period
      loginPeriod = parseInt(loginInfo.remember);
    } else {
      // 否则默认时长为一天
      loginPeriod = 1;
    }
    // 生成 token
    const token = jwt.sign(data, md5(process.env.JWT_SECRET), {expiresIn: 60 * 60 * 24 * loginPeriod});
    return {
      token,
      data
    }
  }
  return {data};
}

// 更新
module.exports.updateAdminService = async function(accountInfo) {
  // 根据传入的账号信息查询对应的用户
  const adminInfo = await loginDao({
    loginId: accountInfo.loginId,
    loginPwd: md5(accountInfo.oldLoginPwd)
  })
  if(adminInfo && adminInfo.dataValues) {
    // 密码正确，更新用户信息
    const newPassword = md5(accountInfo.loginPwd); // 新密码加密
    await updateAdminDao({
      name: accountInfo.name,
      loginId: accountInfo.loginId,
      loginPwd: newPassword,
    })
    return formatResponse(0, "", {
      loginId: accountInfo.loginId,
      name: accountInfo.name,
      id: adminInfo.dataValues.id,
    })
  } else {
    // 密码错误，抛出自定义错误
    throw new ValidationError("旧密码不正确");
  }
}